Technical Q&A QA1258
OpenGL and 3D Graphics Changes in Mac OS X v10.2.5


Q: Mac OS X v10.2.5 の OpenGL と 3D のグラフィックスにはどのような変更点がありますか?

A: Mac OS X v10.2.5 のソフトウェアアップデートでは、ATI Radeon 9700 Pro グラフィックスプロセッサと ATI_separate_stencil OpenGL 拡張のサポートが追加されています。そのほかに、多数のバグ修正、安定性の強化、パフォーマンスの改善が行われました。3D グラフィックスの改善点およびデベロッパに影響する可能性のあるバグ修正の代表的なものの一覧を表 1 に示します。

表 1. 3D グラフィックスのバグ修正

  • ATI_separate_stencil サポートの追加 (r. 3124619)
  • ARB 頂点プログラムパーサの ALIAS 処理の修正 (r. 3144510)
  • ARB 頂点ブレンディングとライティングとの相互作用の修正 (r. 3201658)
  • テクスチャ名が重複して生成されることがある glGenTextures 問題の修正 (r. 3205529)
  • 大規模な表示リストに多数のプリミティブが含まれている場合の処理時間の短縮 (r. 3220938)
  • NVIDIA ドライバのバージョニングの訂正 (r. 3108918)
  • 不正処理の問題を修正するための NVIDIA 上のキューブマップテクスチャのアラインメントのアップデート (r. 3123328)
  • ミラー化された外部の表示処理の改善 (r. 3132806, 3192127, 2948026)
  • NVIDIA ハードウェアにおける大きなインデックス値の処理と ATI ハードウェアにおける頂点配列の範囲指定による多数の頂点配列オブジェクトの処理の修正を含む、頂点配列の範囲操作の改善。なお、処理できる配列インデックスの上限を知るには、デベロッパは、glGetIntegerv(MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE, &maxindex) を使用する必要があります (r. 3133247, 3176602)
  • DVD 再生の改善 (r. 3143872, 3133061, 3133209, 3155766)
  • デプスバッファの書き込みの高速化 (r. 3179715)
  • glDrawPixels、glReadPixels、glCopyPixels の安定性向上 (r. 3210478, 3205289, 3203371)
  • ATI 対応の頂点バッファ VRAM 記憶域のサポートの追加 (r. 3091902)
  • 大容量の AGP メモリを可能にする可変 ATI AGP メモリマッピングの追加 (r. 3148822)
  • Radeon の GL_TRIANGLES アクセラレート機能の改善 (r. 3154410)
  • ATI 対応 COMPRESSED_ALPHA_ARB の修正 (r. 3171044)
  • 特定の ATI ハードウェアにおける GL_TEXTURE_ENV_COMBINE の DOT3 の場合における倍率処理を修正するための ATI カラースケーリングアップデート (r. 3196041)
  • 特定の ATI ハードウェアにおける、要求があった場合に非圧縮の RGBA 4444 テクスチャを正しく圧縮するためのテクスチャ圧縮の修正 (r. 3199377, 3172440)
  • 低容量 VRAM でのテクスチャ処理の改善 (r. 3202818)
  • バッファのフラッシュ処理向けの VBL 同期化方式の改善 (r. 3203896)
  • ATI における、矩形テクスチャの場合の glCopyTexSubImage2D の高速化 (r. 3203906)
  • ATI における UT2003 レンダリングの改善 (r. 3205128, 3205193, 3205211, 3205222, 3132946, 3208100)
  • パック化ピクセルデータ形式を用い、GL_UNPACK_SWAP_BYTES が有効な場合のテクスチャ作成の修正 (r. 3196165)

ATI_separate_stencil 拡張は、フラグメントの生成に用いられたプリミティブが向いている方向に基づいて、ステンシルバッファを変更する機能を提供します。この拡張機能を使用するには、OpenGL frameworks の「glext.h」ヘッダファイルに含まれている定義のほかに追加の定義が必要です。今後のデベロッパツールのアップデートには、これらの追加機能が盛り込まれる予定です。それまでの間、デベロッパは、リスト 1 に示すコードを追加して、お使いのヘッダ群に「glextadditions.h」ファイルを追加できます。アップデート済みの「glext.h」が提供された場合は、この「glextadditions.h」ファイルを削除できます。

// 関数ポインタを使用するためのスイッチ
//#define GL_GLEXT_FUNCTION_POINTERS 1

#define GL_ATI_separate_stencil             1

#if GL_ATI_separate_stencil
#define GL_STENCIL_BACK_FUNC_ATI            0x8800                
#define GL_STENCIL_BACK_FAIL_ATI            0x8801                
#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802                
#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803                
#endif

#if GL_ATI_separate_stencil
#ifdef GL_GLEXT_FUNCTION_POINTERS
typedef void (* glStencilOpSeparateATIProcPtr) 
    (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
typedef void (* glStencilFuncSeparateATIProcPtr) 
    GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
#else
extern void glStencilOpSeparateATI
     (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
extern void glStencilFuncSeparateATI
    (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
#endif /* GL_GLEXT_FUNCTION_POINTERS */
#endif

リスト 1.「glextadditions.h



[2003 年 4 月 29 日]